<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 缓存  
        // 第一次打开浏览器 速度慢 
        // 第二次 第三次 ... 速度快了不少 

        // 为啥? 
        // 浏览器缓存了页面 
        // 第二次 第三次 只需要加载变化的部分 所以我们打开速度快了 


        // 递归函数 

        // 通过不断调用自己 得到结果
        // 这样资源浪费  
        // 如果下一次还是想要同样的结果  可以不可以把上一次结果缓存下来
        // 下一次就不需要计算了  

        // 如何缓存上一次的结果  
        // 延长它的生命周期 


        // 斐波那契数列 

        // function Fibonacci(num){
        //     if(num<=1 || num == 2){
        //         return 1
        //     }

        //     return arguments.callee(num-2)+arguments.callee(num-1);
        // }


        // console.log(Fibonacci(5));
        // console.log(Fibonacci(10));
        // console.log(Fibonacci(15));
        // 每次从头算 

        // 如果 下一次的想要的结果在缓存中 直接拿出来 不要算了 
        // 如果没有 需要从头算 

        function Fibonacci(){
            let cache = {};  //缓存 对象 // {1:1,2:1,3:3,4:5}
            console.log(cache);
            return function(num){
                if(num in cache){
                    return cache[num]
                }
                else{
                    if(num<= 2){
                        return 1;
                    }
                    else{
                        cache[num] = arguments.callee(num-2)+ arguments.callee(num-1);
                        return cache[num];
                    }
                }
            };
        }

        const getFibonacci = Fibonacci();
        console.log(getFibonacci(5));
        console.log(getFibonacci(10));
        console.log(getFibonacci(8)); // 第三次  5在缓存中  所以 不需要重新算了   





    </script>
</body>
</html>